Last modification: 20 May, 2020

@EricJCGalvez

# check.packages function: install and load multiple R packages.
# Check to see if packages are installed. Install them if they are not, then load them into the R session.
check.packages <- function(pkg){
    new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
    if (length(new.pkg)) 
        install.packages(new.pkg, dependencies = TRUE)
    sapply(pkg, require, character.only = TRUE)
}


# Usage example
packages<-c("tidyverse", "ggplot2", "ggthemes", "knitr", "DT", "ggpubr", "ggsci", 
            "data.table", "ggtree", "ape", "treeio", "here")
check.packages(packages)

load tree

## Parsed with column specification:
## cols(
##   tip_id = col_character(),
##   Genome_MAG = col_character(),
##   TipLabels = col_character()
## )
## Warning: 1 parsing failure.
## row col  expected    actual                                  file
## 150  -- 3 columns 2 columns '../data/tree_io_metadata_susD_R.txt'
## Warning: Setting row names on a tibble is deprecated.
##                           rn                  tip_id       Genome_MAG
##   1: BACOVA_03427_XylL_SusD1 BACOVA_03427_XylL_SusD1       BACOVA_Xul
##   2: BACOVA_03429_XylL_SusD2 BACOVA_03429_XylL_SusD2       BACOVA_Xul
##   3:  BACOVA_04392_XylS_SusD  BACOVA_04392_XylS_SusD       BACOVA_Xul
##   4:            MAG609_00227            MAG609_00227           MAG609
##   5:            MAG609_00350            MAG609_00350           MAG609
##  ---                                                                 
## 146:              PROD_01883              PROD_01883 Mouse Prevotella
## 147:              PROD_02119              PROD_02119 Mouse Prevotella
## 148:              PROD_02217              PROD_02217 Mouse Prevotella
## 149:              PROD_02444              PROD_02444 Mouse Prevotella
## 150:              PROD_02831              PROD_02831 Mouse Prevotella
##         TipLabels
##   1: BACOVA_03427
##   2: BACOVA_03429
##   3: BACOVA_04392
##   4:         <NA>
##   5:         <NA>
##  ---             
## 146:         <NA>
## 147:         <NA>
## 148:         <NA>
## 149:         <NA>
## 150:         <NA>
##   [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
##  [38] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 0 0
##  [75] 0 0 0 0 3 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [112] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [149] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0
## [186] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2
## [223] 2 0 0 0 0 0 0 3 3 3 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [260] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
## [297] 0 0 0
## Levels: 0 1 2 3
## [1] "BACOVA_Xul"       "MAG609"           "Mouse Prevotella" "P. copri MAG"    
## [5] "PINT"

## Coordinate system already present. Adding new coordinate system, which will replace the existing one.

LS0tCnRpdGxlOiAiUGh5bG8gVHJlZSB0clN1c0QgUHJldm90ZWxsYSIKYXV0aG9yOiAiRXJpYyBKLkMuIEdhbHZleiIKZGF0ZTogIjIvMy8yMDIwIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6IAogICAgaGlnaGxpZ2h0OiBweWdtZW50cwogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQogICAgZ3JhcGhpY3M6IHllcwogICAgdG9jOiB5ZXMKZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCl9fTGFzdCBtb2RpZmljYXRpb246X18gYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAKCkBFcmljSkNHYWx2ZXoKCjwhLS0gbW9yZSAtLT4KCgpgYGB7ciByZXN1bHRzPSdoaWRlJywgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KIyBjaGVjay5wYWNrYWdlcyBmdW5jdGlvbjogaW5zdGFsbCBhbmQgbG9hZCBtdWx0aXBsZSBSIHBhY2thZ2VzLgojIENoZWNrIHRvIHNlZSBpZiBwYWNrYWdlcyBhcmUgaW5zdGFsbGVkLiBJbnN0YWxsIHRoZW0gaWYgdGhleSBhcmUgbm90LCB0aGVuIGxvYWQgdGhlbSBpbnRvIHRoZSBSIHNlc3Npb24uCmNoZWNrLnBhY2thZ2VzIDwtIGZ1bmN0aW9uKHBrZyl7CiAgICBuZXcucGtnIDwtIHBrZ1shKHBrZyAlaW4lIGluc3RhbGxlZC5wYWNrYWdlcygpWywgIlBhY2thZ2UiXSldCiAgICBpZiAobGVuZ3RoKG5ldy5wa2cpKSAKICAgICAgICBpbnN0YWxsLnBhY2thZ2VzKG5ldy5wa2csIGRlcGVuZGVuY2llcyA9IFRSVUUpCiAgICBzYXBwbHkocGtnLCByZXF1aXJlLCBjaGFyYWN0ZXIub25seSA9IFRSVUUpCn0KCgojIFVzYWdlIGV4YW1wbGUKcGFja2FnZXM8LWMoInRpZHl2ZXJzZSIsICJnZ3Bsb3QyIiwgImdndGhlbWVzIiwgImtuaXRyIiwgIkRUIiwgImdncHViciIsICJnZ3NjaSIsIAogICAgICAgICAgICAiZGF0YS50YWJsZSIsICJnZ3RyZWUiLCAiYXBlIiwgInRyZWVpbyIsICJoZXJlIikKY2hlY2sucGFja2FnZXMocGFja2FnZXMpCmBgYAoKIyMgbG9hZCB0cmVlCmBgYHtyfQp0cmVlIDwtIHRyZWVpbzo6cmVhZC5uZXdpY2soIi4uL2RhdGEvUkF4TUxfYmlwYXJ0aXRpb25zLnN1c0Rfcm9vdGVkLm5ld2ljayIpCgojI0NoZWNraW5nIHRoZSBjbGFkZSBudW1iZXIKIyMgSXMgbmVjZXNhcnkgdG8gcGxvciBmaXJzdCByZW1vdmluZyB0aGUgIiBhZXMoY29sb3I9Z3JvdXApIgojIyB0aGVuIHJ1bm5pbmcgdGhlIGNvbW1hbmQgTVJDQSBhbmQgdGhlIHBsb3QgaW50ZXJ2YWwgaXMgcG9zaWJsZSB0byBnZXQgdGhlIG5vZGUgbnVtYmVyCgojbm9kZV9ybm9kZV9yZWYgPC0yNTIKdHJlZTIgPC0gZ3JvdXBDbGFkZSh0cmVlLCAubm9kZSA9IGMoMTgxLCAyMjEsIDIzMCkpCgoKZGYgPC0gYXMudGJsKHJlYWRfZGVsaW0oIi4uL2RhdGEvdHJlZV9pb19tZXRhZGF0YV9zdXNEX1IudHh0IiwgZGVsaW0gPSAiXHQiKSkKCnJvd25hbWVzKGRmKSA8LSBkZiR0aXBfaWQgICAgICAgICAgICAgICAKc2V0RFQoZGYsIGtlZXAucm93bmFtZXMgPSBUUlVFKVtdCgpjb2xuYW1lcyhkZilbMV0gPC0gImxhYmVsIgoKdHJlZV9kZiA8LSAgdHJlZWlvOjpmdWxsX2pvaW4odHJlZTIsIGRmLCBieSA9ICdsYWJlbCcpCgoKIyMjIyMjIFRvIGNoZWNrIG5vZGUgbnVtYmVyIElEICMjIAojIHN1c2MxX3h5bEwgIQoKI3N1c2QyX3h5bEwgPC0gTVJDQShwLCAiQkFDT1ZBXzAzNDI3X1h5bExfU3VzRDEiLCAiTUFHNjEyXzAwNjg5IikgIzIzMAojc3VzZDFfeHlsTCA8LSBNUkNBKHAsICJCQUNPVkFfMDM0MjlfWHlsTF9TdXNEMiIsICJNQUc2MDlfMDEyMjciKSAjMjIxCiNzdXNkMV94eWxTIDwtIE1SQ0EocCwgIk1BRzYxMV8wMTQ2OSIsICJNQUc2MTJfMDA0MjIiKSAjMTgxCgoKdHJlZV9kZkBkYXRhJGdyb3VwCmBgYAoKCmBgYHtyLCBmaWcuaGVpZ2h0PTksIGZpZy53aWR0aD02fQoKbGV2ZWxzKGZhY3RvcihkZiRHZW5vbWVfTUFHKSkKCm15X2NvbF9ob3N0PSBjKCIwIj0iYmxhY2siLCAiMSI9IiMyMTY2YWMiLCAiMiI9IiMyMTY2YWMiLCAiMyI9IiMyMTY2YWMiLAogICAgICAgICAgICAgICAiQkFDT1ZBX1h1bCI9IiNmZWM0NGYiLCJNQUc2MDkiPSIjY2IxODFkIiwKICAgICAgICAgICAgICAgIk1vdXNlIFByZXZvdGVsbGEiPSIjYThkZGI1IiwgIlBJTlQiPSIjZmI4MDcyIiwgIlAuIGNvcHJpIE1BRyI9IiM1MjUyNTIiKQoKcCA8LSBwIDwtIGdndHJlZSh0ciA9IHRyZWVfZGYsIGxheW91dCA9ICJyZWN0YW5ndWxhciIsIGFlcyhjb2xvcj1ncm91cCksIHJpZ2h0ID0gVFJVRSAsIHNpemU9MSkgKwogICAgICBnZW9tX3RpcHBvaW50KGFlcyhjb2xvcj1HZW5vbWVfTUFHKSwgc2l6ZT0xLjUsIGFscGhhPSAwLjcpICsKICAgICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcz1teV9jb2xfaG9zdCkgKwogICAgICBnZW9tX3Jvb3RlZGdlKDAuMDEpCnAKCiMjIG51bWJlciBpbmZlcmVkIGZyb20gTVJDQSBmdW5jdGlvbgpjbGFkZTEgPC0gMTgxCmNsYWRlMiA8LSAyMjEKY2xhZGUzIDwtIDIzMAoKcDEgPC0gc2NhbGVDbGFkZShwLCBub2RlPTI1Miwgc2NhbGU9MSkgJT4lIAogIHNjYWxlQ2xhZGUoLiwgbm9kZT0yNDMsIHNjYWxlPTEpICAlPiUgCiAgc2NhbGVDbGFkZSguLCBub2RlPTIyNSwgc2NhbGU9MSkKCnAyIDwtIHAgKyBnZW9tX2hpbGlnaHQobm9kZT1jbGFkZTEsIGZpbGw9IiNmZWIyNGMiLCBhbHBoYT0uMywgZXh0ZW5kID0gMSkgKwogICAgZ2VvbV9oaWxpZ2h0KG5vZGU9Y2xhZGUyLCBmaWxsPSIjZmViMjRjIiwgYWxwaGE9LjMsIGV4dGVuZCA9IDEpICsKICAgIGdlb21faGlsaWdodChub2RlPWNsYWRlMywgZmlsbD0iI2ZlYjI0YyIsIGFscGhhPS4zLCBleHRlbmQgPSAxKSArCiAgICBnZW9tX3RpcGxhYihhZXMobGFiZWw9VGlwTGFiZWxzLCBuYS5vbWl0PVQpLCBsaW5ldHlwZT1OQSwgYWxpZ24gPSBGLAogICAgICAgICAgICAgICAgICB2anVzdD0wLjUsIGhqdXN0PS0uMSwgY29sb3I9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgIHNpemU9MS41LCBvZmZzZXQgPSAuMDA1KQoKcDIKCiNleHBvcnQgNng5CmBgYAoKCmBgYHtyLCBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy5oZWlnaHQ9MTQsIGZpZy53aWR0aD0xOH0KCnAgPC0gZ2d0cmVlKHRyID0gdHJlZV9kZiwgbGF5b3V0ID0gImZhbiIsIGFlcyhjb2xvcj1ncm91cCwgZmlsbD1HZW5vbWVfTUFHKSwgc2l6ZT0xLCAgIzAuMwogICAgICAgICAgICBvcGVuLmFuZ2xlID0gMTUsIHJpZ2h0ID0gVCkgKwogICAgICAjZ2VvbV90aXBwb2ludChhZXMoY29sb3I9R2Vub21lX01BRyksIHNpemU9MSwgYWxwaGE9IDAuNywgc2hhcGU9IGMoMTApKSArCiAgICAgIGdlb21fcG9pbnQoYWVzKHNoYXBlPUdlbm9tZV9NQUcsIGNvbG9yPUdlbm9tZV9NQUcsIGFscGhhPSAwLjksIHNpemU9MiksIG5hLnJtPVRSVUUpICsKICAgICAgc2NhbGVfc2hhcGVfbWFudWFsKHZhbHVlcyA9IGMoMTYsIDIwLCAyMCwgMjAsIDEpKSArCiAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9bXlfY29sX2hvc3QpICsKICAgICAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzPW15X2NvbF9ob3N0KSArCiAgICAgIGdlb21fcm9vdGVkZ2UoMC41KQpwCgpwMSA8LSBzY2FsZUNsYWRlKHAsIG5vZGU9MTgxLCBzY2FsZT0xKSAlPiUgCiAgICAgIHNjYWxlQ2xhZGUoLiwgbm9kZT0yMjEsIHNjYWxlPTEpICAlPiUgCiAgICAgIHNjYWxlQ2xhZGUoLiwgbm9kZT0yMzAsIHNjYWxlPTEpCgoKY2xhZGUxIDwtIDE4MQpjbGFkZTIgPC0gMjIxCmNsYWRlMyA8LSAyMzAKCnAzIDwtIHAxICsKICAgIGdlb21faGlsaWdodChub2RlPWNsYWRlMSwgZmlsbD0iI2ZlYjI0YyIsIGFscGhhPS4zLCBleHRlbmQgPSAxKSArCiAgICBnZW9tX2hpbGlnaHQobm9kZT1jbGFkZTIsIGZpbGw9IiNmZWIyNGMiLCBhbHBoYT0uMywgZXh0ZW5kID0gMSkgKwogICAgZ2VvbV9oaWxpZ2h0KG5vZGU9Y2xhZGUzLCBmaWxsPSIjZmViMjRjIiwgYWxwaGE9LjMsIGV4dGVuZCA9IDEpICsKICAgIGdlb21fdGlwbGFiKGFlcyhsYWJlbD1UaXBMYWJlbHMsIG5hLm9taXQ9VCksIGxpbmV0eXBlPU5BLCBhbGlnbiA9IEYsCiAgICAgICAgICAgICAgICAgIHZqdXN0PTAuNSwgaGp1c3Q9LS4xLCBjb2xvcj0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgc2l6ZT0gMiwgb2Zmc2V0ID0gLjAwNSkgCgpwMwoKcm90YXRlX3RyZWUocDMsIDE4MCkgCgojZXhwb3J0IDYgeCA5CmBgYAo=